package JZ.JZ33;

/**
 * @author corn
 * @create 2020-10-24-19:15
 */

/**
 * JZ33 丑数
 * 题目描述
 * 把只包含质因子2、3和5的数称作丑数（Ugly Number）。
 * 例如6、8都是丑数，但14不是，因为它包含质因子7。
 * 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
 *
 */
public class Solution {
    public int GetUglyNumber_Solution(int index) {
        //初始判断index是否合法
        if (index <= 0) {
            return 0;
        }
        //分别记录乘2，3，5已经到了数组哪个下标
        int p2 = 0;
        int p3 = 0;
        int p5 = 0;
        //用于存储index个丑数
        int[] arr = new int[index];//数组中每一个数都要乘以2，3，5
        //设置第一个数为丑数
        arr[0] = 1;
        //循环顺序计算出所有的丑数
        for (int i = 1; i < index; i++) {
            //得出下一个丑数是分别乘以2，3，5中的最小数
            arr[i] = Math.min(arr[p2] * 2, Math.min(arr[p3] * 3, arr[p5] * 5));
            if(arr[i] == arr[p2]*2){
                p2++;
            }
            if(arr[i] == arr[p3]*3){
                p3++;
            }
            if(arr[i] == arr[p5]*5){
                p5++;
            }
        }
        //将第index个丑数放回
        return arr[index-1];
    }
}
